Amazon Linux 2環境上にGCPコマンドラインツール・Google Cloud SDK動作環境を整える
直近、業務にてAWSとGCPを合わせて利活用するケースがあり、各種挙動を確認する必要性があったので、その際に整えた環境の構築手順を備忘録として残しておきたいと思います。
目次
- 環境概要
- 導入環境の準備
- pyenvのインストール
- Python 3.x系環境をインストール
- AWS: AWS CLI(v2)のインストール
- GCP: Google Cloud SDKのインストール
- GCP: サービスアカウント利用に際して認証情報を設定
- GCP: サービスアカウントのアクティベーション
- GCP: 各種サービスの連携をサンプルコードで確認
- まとめ
環境概要
差し当たって揃えた環境やライブラリは以下の通り。
- Amazon Linux 2
- Python 3.7.6
- AWS CLI v2
- GCPのコマンドラインツール
- Google Cloud SDK(Python)
導入環境の準備
今回揃える環境として、Amazon Linux 2を用いました。
# ssh -i cm-gcp-xxxxxx.pem ec2-user@xx.xxx.xxx.xx $ sudo yum -y update $ cat /etc/os-release NAME="Amazon Linux" VERSION="2" ID="amzn" ID_LIKE="centos rhel fedora" VERSION_ID="2" PRETTY_NAME="Amazon Linux 2" ANSI_COLOR="0;33" CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2" HOME_URL="https://amazonlinux.com/"
Pythonの初期設定時バージョンは導入済のもので2.7系。これを3.x系にアップグレードしておきます。
$ python --version Python 2.7.16
pyenvのインストール
Pythonバージョン環境切替のソリューションについては現在様々なものが出ていますが、今回は3.xに切り替えられれば良いや、位のノリなのでここではpyenvで対応。
## gitの導入(何やかんやで使うので合わせてjqも入れてる) $ sudo yum -y install git jq $ git --version ## git cloneコマンドで必要な情報を入手 $ git clone https://github.com/yyuu/pyenv.git ~/.pyenv Cloning into '/home/ec2-user/.pyenv'... remote: Enumerating objects: 17608, done. remote: Total 17608 (delta 0), reused 0 (delta 0), pack-reused 17608 Receiving objects: 100% (17608/17608), 3.47 MiB | 22.62 MiB/s, done. Resolving deltas: 100% (11960/11960), done. ## 環境変数設定 $ vi ~/.bashrc # 下記の内容を末尾に追記 export PYENV_ROOT="${HOME}/.pyenv" if [ -d "${PYENV_ROOT}" ]; then export PATH=${PYENV_ROOT}/bin:$PATH eval "$(pyenv init -)" fi $ source ~/.bashrc ## 導入完了確認 $ pyenv --version pyenv 1.2.16-5-g7097f820
Python 3.x系環境をインストール
導入可能な環境の一覧を確認。ここではPython3.x系の中で3.7.6を導入する事にしました。
所定バージョンのインストールに際しては諸々必要なライブラリがありますので、前もってyumコマンドで導入しておきます。導入が完了したらpyenv install (バージョン番号)でインストール実施。
$ pyenv install --list $ sudo yum -y install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel $ pyenv install 3.7.6 Downloading Python-3.7.6.tar.xz... -> https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tar.xz Installing Python-3.7.6... Installed Python-3.7.6 to /home/ec2-user/.pyenv/versions/3.7.6
バージョンの切替を行い、変わったことを確認出来ていればOK。
## バージョン切替. $ pyenv global 3.7.6 $ pyenv rehash ## バージョンが切り替わったことを確認. $ pyenv versions system * 3.7.6 (set by /home/ec2-user/.pyenv/version) ## pythonのコマンドでも確認. $ python --version Python 3.7.6
AWS: AWS CLI(v2)のインストール
現状、AWS CLIは従来使えていたv1系のものと、先日一般利用可能となったv2系が存在します。ここでは、せっかくなのでv2系を使ってみたいと思います。
手順としては以下3ステップを実行するだけ。予めPythonの環境を用意・考慮しておく必要が無い(You no longer need to install and maintain Python to use the AWS CLI.)というのが嬉しい所ですね。(今回の環境ではPythonプログラムを実行したいのもあったので個別にPython環境は用意しましたが)
$ curl "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" $ unzip awscliv2.zip $ sudo ./aws/install
コマンドインストール後のバージョン確認。導入したバージョン(v3.7.6)とは異なる独立したバージョンのものが導入されていました。
$ aws --version aws-cli/2.0.0 Python/3.7.3 Linux/4.14.154-128.181.amzn2.x86_64 botocore/2.0.0dev4
GCP: Google Cloud SDKのインストール
ライブラリインストールに伴い、必要なリポジトリと連携する為に設定ファイルを別途作成しておきます。
$ sudo tee -a /etc/yum.repos.d/google-cloud-sdk.repo << EOM [google-cloud-sdk] name=Google Cloud SDK baseurl=https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64 enabled=1 ##gpgcheck=1 ##repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOM
上記設定後、yumコマンドで必要なライブラリをインストール。gcloud --versionでバージョンを確認する事が可能です。この手順ではgsutilの他にもbq(BigQuery)やkubectl(Kubernetes)のコマンドラインツールなども合わせて導入されます。
$ sudo yum -y install google-cloud-sdk $ gcloud --version Google Cloud SDK 279.0.0 alpha 2020.01.31 beta 2020.01.31 bq 2.0.53 core 2020.01.31 gsutil 4.47 kubectl 2020.01.31
GCP: サービスアカウントのアクティベーション
この環境では、Google Cloud SDKを利用するための認証を「サービスアカウントキー認証」によって行います。サービスアカウントキーの作成については下記エントリをご参照ください。
作成したサービスアカウントキーを当該環境の所定のパスに保存。
$ pwd /home/ec2-user $ ls gcp-service-account-key.json
gcloud auth activate-service-accountコマンドで認証処理実行。
## 1つ目の引数:認証に用いるサービスアカウントのアドレス ## 2つ目の引数(--key-file):配備したサービスアカウントキーのフルパス ## 3つめ目引数(--project):認証対象のプロジェクト名 $ gcloud auth activate-service-account \ xxxxxxxxxxxxxxx@yyyyyyy.iam.gserviceaccount.com \ --key-file /home/ec2-user/gcp-service-account-key.json \ --project cm-da-xxxxxxxx Activated service account credentials for: [xxxxxxxxxxxxxxx@yyyyyyy.iam.gserviceaccount.com]
以下の形式でプロジェクトの一覧が表示されていれば認証完了です。
$ gcloud projects list PROJECT_ID NAME PROJECT_NUMBER cm-da-xxxxxxxxxx cm-da-xxxxxxxxxx 123456789123
GCP: サービスアカウント利用に際して認証情報を設定
サービスアカウントを使用する場合、予め認証情報を設定しておく必要があります。
環境変数GOOGLE_APPLICATION_CREDENTIALSにサービスアカウントキーの配置パスを設定することで、この対応が行えます。
## 末尾に追記(フルパス、実際に配置したパスを設定) $ vi ~/.bash_profile ---- export GOOGLE_APPLICATION_CREDENTIALS=/home/ec2-user/gcp-service-account-key.json ---- $ source ~/.bash_profile ## 内容を確認、設定したパスが表示されていればOK $ echo $GOOGLE_APPLICATION_CREDENTIALS
GCP: 各種サービスの連携をサンプルコードで確認
上記までの手順で初期設定は完了です。実際にプログラムが稼働するかどうか、試してみましょう。
Google Cloud Storage
任意のGoogle Cloud Storageバケットが1つ以上存在している状態で、そのバケット一覧が取得出来るかどうか試します。
CLIで確認
$ gsutil ls gs://s31b/ gs://shinyaa31-gcs-bucket/
Google Cloud SDK(Python)で確認
関連ライブラリのインストール:
$ pip3 install --upgrade google-cloud-storage
Pythonプログラムを用意]:
from google.cloud import storage # If you don't specify credentials when constructing the client, the # client library will look for credentials in the environment. storage_client = storage.Client() # Make an authenticated API request buckets = list(storage_client.list_buckets()) print(buckets)
Pythonプログラム実行:
$ python list-gcs-buckets.py [<Bucket: shinyaa31-gcs-bucket-1>, <Bucket: shinyaa31-gcs-bucket-2>, <Bucket: shinyaa31-gcs-bucket-3>]
Google BigQuery
CLIで確認
$ bq ls datasetId ---------------------- cmdataset shinyaa31_bq_dataset
Google Cloud SDK(Python)で確認
関連ライブラリのインストール:
$ pip3 install --upgrade google-cloud-bigquery
Pythonプログラムを用意]:
# TODO(developer): Import the client library. from google.cloud import bigquery # TODO(developer): Construct a BigQuery client object. client = bigquery.Client() datasets = list(client.list_datasets()) # Make an API request. project = client.project if datasets: print("Datasets in project {}:".format(project)) for dataset in datasets: print("\t{}".format(dataset.dataset_id)) else: print("{} project does not contain any datasets.".format(project))
Pythonプログラム実行:
$ python list-bq-datasets.py Datasets in project cm-xxxxxxxxxxx: cmdataset shinyaa31_bq_dataset
まとめ
という訳で、Amazon Linux 2上にGCPのプログラム動作検証を行う手順のまとめ紹介でした。
今後必要なセットアップ、ライブラリは増えてくると思いますのでその際は適宜このエントリに追記していこうと思います。